Vast amounts of data are transmitted and received every day in a variety of contexts, from all manner of devices, including, mobile phones, personal computers, backend data servers, or the like. One major concern is the size of data transmitted. Data transmitted from one endpoint to another may travel through a variety of intermediate networking hardware, such as routers, switches, servers, Internet service providers (ISPs), and so forth. Each intermediate entity is affected by the size of the data, which consumes resources such as, memory, CPU, network bandwidth, cache space, or the like.
Data compression is designed to help alleviate these potential problems by reducing data size. Since bandwidth and storage may be scarce resources for both analog and digital communication, the need for compressing information to use less space is also a needed commodity. The goal of data compression is to represent the exchanged information in a more compact form that takes less space to store and less time to transmit. A sender may compress data by noticing redundancies in the data, finding patterns in the data, and applying a variety of other well-known compression techniques. A receiver may employ shared knowledge about the compression method used to decompress the compressed data back into an uncompressed form. Compression may occur at the sender, at intermediate entities between the sender and receiver (e.g., TCP header compression), or anywhere else, in the communication chain. Thus, it is in the consideration of at least these issues that the following subject matter is directed.